#include <stdio.h>
#include <stdlib.h>

// int (*compar)(const void *, const void *)
// int  函数返回值类型
//(*compar) 表示这是一个指针类型，指针名为 compar
// (const void *, const void *) 参数列表的类型

// 泛型编程

typedef int (*asodifjaiofja)(const void *, const void *);
/*
int  函数返回值类型

(*asodifjaiofja)
asodifjaiofja -->> 函数名 是函数的首地址

找到函数

将这个函数指针 定义成为了一种类型 类型名 叫做 asodifjaiofja
*/



void sort_func(void *base, size_t nmemb, size_t size, asodifjaiofja func);
//程序没调用这个函数



// 比较函数
/*
作用：定义两个元素的比较规则

关键点：

参数为 const void*，需强制转换为实际类型（如 int*）后再取值比较

返回值决定排序顺序：

正数：val_1 > val_2，排序后 val_1 在后

负数：val_1 < val_2，排序后 val_1 在前

零：两元素相等
*/
int Compar(const void *val_1, const void *val_2)
{
    printf("val1 = %d\n", *(int *)val_1);
    printf("val2 = %d\n", *(int *)val_2);
    return *(int *)val_1 - *(int *)val_2;
}



int main(int argc, char const *argv[])
{
    int arr[10] = {8, 6, 5, 2, 9, 7, 10, 30, 1, 90};

  
 
    qsort(arr, sizeof(arr) / sizeof(int), sizeof(int), Compar);
    /*
       功能：对整型数组 arr 进行快速排序。
       参数解析：
              arr：待排序数组首地址。
              sizeof(arr)/sizeof(int)：计算数组元素个数。
              sizeof(int)：每个元素的大小（字节数）。
              Compar：自定义的比较函数，决定排序规则。
    */

    //输出排好序的数组
    for (size_t i = 0; i < sizeof(arr) / sizeof(int); i++)
    {
        printf("arr[%ld] = [%d]\n", i, arr[i]);
    }

    return 0;
}